package at.guigu.domain.query;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Data;

/**
 * 分页查询的请求参数实体
 */
@Data
public class PageQuery {
    // 当前页码
    private Integer pageNo = 1;
    // 每页显示的数据量
    private Integer pageSize = 5;
    // 定义需要排序的字段
    private String sortBy;
    // 是否升序排列
    private Boolean isAsc = false;

    /**
     * 单字段排序
     * 若前端未传来参数则按照该方法的参数进行默认排序
     * @param defaultSortBy
     * @param isAsc
     * @return Page<T>
     * @param <T>
     */
    public <T> Page<T> toMpPage (String defaultSortBy, Boolean isAsc) {
        // 1 构建分页条件
        Page<T> p = Page.of(pageNo, pageSize);
        //2 根据指定参数进行升序排列
        // 若获取的字符串不为null，且不为空则按照排序字段排序
        if (StrUtil.isNotBlank(sortBy)) {
            p.addOrder(this.isAsc ? OrderItem.ascs(sortBy) : OrderItem.descs(sortBy));
        } else {
            // 若排序字段为空，默认按照传入参数排序
            p.addOrder(isAsc ? OrderItem.asc(defaultSortBy) : OrderItem.desc(defaultSortBy));
        }
        return p;
    }

}